<?php
/**
 * @package    embryo
 * @subpackage models
 * @author     Alessandro Pelliciari
 * @version    SVN: $Id$
 */

/**
 * Model rappresenta il modello generico.
 *
 */
class Model {

    /**
     *
     * @var array Record risultante dal fetch via database
     */
    protected $record;

    /**
     *
     * @var Db Riferimento al database contenuto nel container
     */
    protected $db;

    /**
     *
     * @var Container Container dell'applicazione
     */
    protected $container;

    /**
     *
     * Il costruttore del modello viene di norma chiamato da altri factory
     * methods, metodi statici che permettono di creare l'oggetto attraverso certi
     * parametri.
     *
     * Il costruttore è generico e riceve sempre, oltre al container, un set
     * di parametri.
     *
     * Questi parametri vengono caricati come proprietà all'interno dell'oggetto
     * grazie al metodo {@link load_properties()}
     *
     * @param Container $container Application Container
     * @param array $params Array di parametri
     */
    protected function  __construct(Container $container, array $params = array()) {

        $this->container = $container;

        $this->db = $this->container->db;

        $this->load_properties($params);
    }

    // --------------------------------------------------------------------

    /**
     * Carica le proprietà basandosi sull'array di parametri passato.
     * Se all'interno dei parametri c'è un particolare parametro chiamato
     * 'record', il metodo salva i suoi elementi come proprietà.
     *
     * Questo serve perchè un record di database viene automaticamente caricato
     * dal database e tutte le proprietà non hanno poi bisogno di essere
     * accedute tramite $this->record["property"], ma sono proprietà a tutti gli
     * effetti.
     *
     * @param array $properties Array di propriertà / parametri
     */
    protected function load_properties(array $properties = array()) {

        if (is_array($properties["record"])) {

            foreach ($properties["record"] as $record_key => $record_value) {
                $this->$record_key = $record_value;
            }
        }

        $this->record = $properties["record"];

        $properties["record"] = array();

        if (is_array($properties)) {

            foreach ($properties as $key => $value) {

                $this->$key = $value;
            }
        }
    }

}